package main

import (
	"github.com/astaxie/beego"
	_ "forhouyu/routers"
	"forhouyu/models"
	"github.com/astaxie/beego/orm"
	"forhouyu/utils"
	"github.com/astaxie/beego/context"
)



func main() {
	orm.Debug = true

	conn_url := models.DB_username + ":" + models.DB_password +"@tcp(" + models.DB_ip + ":" + models.DB_port+")/" + models.DB_name + "?charset=utf8"//组合成连接串
	orm.RegisterDriver("mysql", orm.DRMySQL) //注册mysql驱动
	orm.RegisterDataBase("default", "mysql", conn_url) //设置conn中的数据库为默认使用数据库

	//注册模型
	orm.RegisterModel(new(models.Cert_cpdj))
	orm.RegisterModel(new(models.Cert_qysb))
	orm.RegisterModel(new(models.Cert_wxd))
	orm.RegisterModel(new(models.Cert_cpxx))
	orm.RegisterModel(new(models.SystemUser))
	orm.RegisterModel(new(models.SystemRole))

	orm.RunSyncdb("default", false, true)//后一个使用true会带上很多打印信息，数据库操作和建表操作的；第二个为true代表强制创建表

	//登陆权限过滤器
	var FilterUser = func(ctx *context.Context) {
		user, ok := ctx.Input.Session("User").(models.SystemUser)
		if !ok && ctx.Request.RequestURI != "/login" && ctx.Request.RequestURI != "/loginview" {
			ctx.Redirect(303, "/loginview")
		}
		//beego的使用缺陷，没有在模版中使用session的标签
		//为了方便使用，不在每一个Controller设置数据，此处统一将session数据放到data内使用
		//实际是将Session变量放到request作用域
		ctx.Input.Data()["User"] = user
	}
	beego.InsertFilter("/*",beego.BeforeRouter,FilterUser)

	beego.AddFuncMap("element", utils.Element)
	beego.Run()
}
